﻿// ***********************************************************************
// Apache 2.0 License
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY 
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR 
// PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing
// permissions and limitations under the License.
// ***********************************************************************
// Assembly  : ContractMeow.Models
// File      : OpenGraphPageAttachmentModel.cs
//
// ***********************************************************************
using ContractMeow.Api.Dtos.Attachment;
using ContractMeow.Api.Dtos.Extensions;

namespace ContractMeow.Models.Attachments
{
	public class OpenGraphPageAttachmentModel : YModuleAttachmentModel, IOpenGraphPageAttachmentModel
	{
		private string _objectName;
		private string _objectType;
		private string _hostDomain;

		public static IOpenGraphPageAttachmentModel FromIOpenGraphPageAttachment(IOpenGraphPageAttachment attachment)
		{
			return new OpenGraphPageAttachmentModel(attachment);
		}

		public OpenGraphPageAttachmentModel() { }

		internal OpenGraphPageAttachmentModel(IOpenGraphPageAttachment attachment)
			: base(attachment)
		{
			ThumbnailUrl = attachment.ThumbnailUrl.ToUri();
			InlineUrl = attachment.InlineUrl.ToUri();

			ObjectName = attachment.ObjectName;
			ObjectType = attachment.ObjectType;
			HostDomain = attachment.HostUrl as string;
			if (HostDomain == null)
			{
				if (WebUrl != null)
				{
					var host = WebUrl.Host;
					HostDomain = string.IsNullOrEmpty(host) ? string.Empty : host;
				}
				else
				{
					HostDomain = string.Empty;
				}
			}
		}

		public string ObjectName
		{
			get { return _objectName; }
			set
			{
				_objectName = value;
			}
		}

		public string ObjectType
		{
			get { return _objectType; }
			set
			{
				_objectType = value;
			}
		}

		public string HostDomain
		{
			get { return _hostDomain; }
			set
			{
				_hostDomain = value;
			}
		}

		public override bool HasHostDomain
		{
			get { return !string.IsNullOrWhiteSpace(HostDomain); }
		}
	}
}